﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace CashCommon
{
    /// <summary>
    /// Интерфейс работы с коннекцией к базе данных
    /// </summary>
    public interface IDatabaseBase
    {
        /// <summary>
        /// Функции для работы с коннекцией
        /// </summary>
        /// <param name="aDataSource">Имя источника данных</param>
        /// <param name="aLogin">Имя пользователя</param>
        /// <param name="aPassword">Пароль</param>
        void Connect(string dataSource, string dataBase, string connectedUser, string password);

        /// <summary>
        /// Закрывает соединение с базой данных.
        /// </summary>
        void Close();

        /// <summary>
        /// Проверяет, является ли текущее соединение активным
        /// </summary>
        /// <returns>Если соединение активно, возвращается true иначе false</returns>
        bool IsActive();

        /// <summary>
        /// Открывает для соединения новую транзакцию
        /// </summary>
        void StartTransaction();

        /// <summary>
        /// Проверяет, находится ли соединение в активной транзакции
        /// </summary>
        /// <returns>Если существует активная транзакция возвращается значение true, иначе false</returns>
        bool InTransaction();

        /// <summary>
        /// Подтверждение изменений в базе, завершение выполнения транзакции, уничтожение объекта транзакции
        /// </summary>
        void Commit();

        /// <summary>
        /// Отмена изменений в базе, завершение выполнения транзакции, уничтожение объекта транзакции
        /// </summary>
        void Rollback();

        void AddInParameter(string name, SqlDbType sqlType, object value, SqlCommand command, bool IsNull);
        SqlParameter AddOutParameter(string name, SqlDbType sqlType, SqlCommand command);

        SqlConnection SqlConnection { get; }
        SqlTransaction SqlTransaction { get; }
        
        /// <summary>
        /// Имя сервера базы данных
        /// </summary>
        string ServerName { get; }
        /// <summary>
        /// Имя базы данных
        /// </summary>
        string DbName { get; }
        /// <summary>
        /// Логин пользователя
        /// </summary>
        string Login { get; }
        /// <summary>
        /// Машина пользователя
        /// </summary>
        string UserHost { get; }

    }
}
